# 1、抽象类不能被实例化
# 2、抽象类需要继承ABC,并且需要至少一个抽象方法
from abc import ABC, abstractmethod


class Animal(ABC):
    name = None
    age = None

    # 3.抽象类中可以有普通方法
    def hi(self):
        print("hi")
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 此时cry就是一个抽象方法
    @abstractmethod
    def cry(self):
        pass

    @abstractmethod
    def ok(self):
        pass

class Cat(Animal):
    def cry(self):
        print("miao~")

# 如果没有实现抽象方法就可以实例化
# animal = Animal("jack", 18)

# 4.如果一个类继承了抽象类，那么必须实现抽象类中的所有抽象方法，否则依然是抽象类就不能实例化
# 因为定义了两个抽象方法，但是目前只实现了一个，所有不能实例化，会报错
cat = Cat("jack", 18)
cat.cry()
cat.hi()

